#ifndef __CLIENT_H
#define __CLIENT_H

// 1. 包含通用标准库
#include <stdio.h>
#include <stdlib.h>
#include <string.h>    
#include <unistd.h>
#include <libgen.h>

// +++ 包含文件相关的基础库 +++
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

// +++ 包含错误相关的基础库 +++
#include <errno.h> 

// +++ 包含网络相关的基础库 +++
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

// 2. 包含所有自定义模块的头文件
#include "tcp_client.h"
#include "command_handler.h"
#include "tlv_protocol.h"

// 命令行参数个数校验
#define ARGS_CHECK(argc, expected, usage) \
    do { \
        if ((argc) != (expected)) { \
            fprintf(stderr, "%s\n", usage); \
            return -1; \
        } \
    } while (0)

// 返回值错误校验
#define ERROR_CHECK(ret, error_flag, msg) \
    do { \
        if ((ret) == (error_flag)) { \
            fprintf(stderr, "Error in %s at line %d: ", __FILE__, __LINE__); \
            perror(msg); \
            return -1; \
        } \
    } while (0)

#endif
